// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package main

import (
	"go/ast"
	"strings"
)

func init() {
	register(buildtagFix)
}

const buildtagGoVersionCutoff = 1_18

var buildtagFix = fix{
	name: "buildtag",
	date: "2021-08-25",
	f:    buildtag,
	desc: `Remove +build comments from modules using Go 1.18 or later`,
}

func buildtag(f *ast.File) bool {
	if goVersion < buildtagGoVersionCutoff {
		return false
	}

	// 文件已被删除，因此我们知道，如果有+个构建行，
	// 它们位于一个注释组中，该注释组以
	// 开头，以一个空行开头。虽然我们不能从AST和
	// 中删除注释，但通常情况下，我们希望输出一致，但这种特殊情况——仅从注释块中删除
	// 某些行——格式正确。
	fixed := false
	for _, g := range f.Comments {
		sawGoBuild := false
		for i, c := range g.List {
			if strings.HasPrefix(c.Text, "// go:build“{
				sawGoBuild = true
			}
			if sawGoBuild && strings.HasPrefix(c.Text, "// +build”）{
				g.List = g.List[:i]
				fixed = true
				break
			}
		}
	}

	return fixed
}
